#ifndef XMLINFOIDENTIFIANT_HPP
#define XMLINFOIDENTIFIANT_HPP

#include "BaseXmlInfo.hpp"

#include <QtCore/QHash>

/**
 * Fonction permettant de récupérer l'information depuis la structure
 * de données utilisée pour stocker les attributs et valeurs d'un
 * élément DOM.
 *
 * @param[in] infos pointeur sur le hash table ayant comme clef le nom
 * de l'attribut lié à sa valeur.
 * @param[in] quoi nom de l'attribut.
 *
 * @return la valeur de l'attribut \c quoi. Si ce dernier n'existe
 * pas, QString() est renvoyé.
 */
QString recupereInformation( const QHash< QString, QString >* infos,
			     const char* quoi );

/**
 * Classe ajoutant au nom de fichier un nombre qui identifie de
 * manière unique un objet quel qu'il soit. Cet identifiant est un
 * nombre entier.
 *
 * @author Johan "Solo" Luisier
 * @date Octobre 2011
 */
class XmlInfoIdentifiant : public BaseXmlInfo
{
public:
    /** Constructeur standard.
      * Initialise la classe mère et l'identifiant.
      *
      * @param[in] nomFichier nom du fichier XML.
      * @param[in] id identifiant de l'objet.
      */
    XmlInfoIdentifiant( const QString& nomFichier, const unsigned& id );
    /** Constructeur de copie.
      * Permet de dupliquer une instance de @c XmlInfoIdentifiant.
      *
      * @param[in] identifiant instance à dupliquer.
      */
    XmlInfoIdentifiant( const XmlInfoIdentifiant& identifiant );
    /** Destructeur.
      * Le destructeur n'a rien de spécial à faire.
      */
    virtual ~XmlInfoIdentifiant();
    /** Opérateur d'affectation.
      * Permet de copier le contenu d'une instance dans une autre.
      *
      * @param[in] identifiant instance à copier dans l'instance courante.
      *
      * @return une référence sur l'instance courante.
      */
    XmlInfoIdentifiant& operator=( const XmlInfoIdentifiant& identifiant );
    /** Permet d'afficher les informations contenues dans l'instance.
      * Est utilisé à des fin de debug uniquement.
      */
    void afficheInstance() const;
    /** Permet d'accéder à Identification.
      *
      * @return une référence constante sur Identification.
      */
    const unsigned& identification() const;
    /** Permet de changer la valeur de Identification.
      *
      * @param[in] id nouvelle valeur de Identification.
      */
    void setIdentification( const unsigned& id );
    /** Méthode permettant de créer une instance depuis une balise XML.
      * Une balise permet de définir une instance à partir de ses attributs :
      * chaque attribut correspond à un membre de la classe.
      *
      * @param[in] nomFichier nom du fichier XML.
      * @param[in] infos liste des valeurs utilisées, indexée par le nom de
      * l'attribut.
      *
      * @return une instance de @c XmlInfoIdentifiant qui est vide si une erreur
      * se produit lors de la lecture des informations.
      */
    static XmlInfoIdentifiant creeInstance( const QString& nomFichier,
                                            const QHash< QString,
                                            QString >* infos );
protected:
    /** Constructeur par défaut.
      * Est utilisé pour renvoyer une instance invalide depuis creeInstance si
      * une erreur est détectée dans la lecture des valeurs.
      */
    XmlInfoIdentifiant();
    /** Numéro identifiant l'objet récupéré.
      */
    unsigned Identification;
};

#endif // XMLINFOIDENTIFIANT_HPP
